Network data communication between computers allows a first application program to access the data of a second application program. In conventional application-to-application communication, the time spent passing messages between applications includes the overhead of crossing interfaces between the operating system, a device driver, and the network interface hardware. These overhead functions have been reduced to some extent by an interface design of the type referred to generally as virtual interface (VI) and described for example in “Virtual Interface Architecture Specification”, Version 1.0, Dec. 16, 1997, Compaq Computer Corp., Intel Corp., Microsoft Corp., pp. 1-83. A conventional VI is implemented with a network interface controller in the computer that hosts the first application and a second network interface controller in the computer that hosts the second application. Each network interface controller maintains work queues for transmit and receive functions.
Conventional protection mechanisms do not provide sufficient isolation between application programs. In particular, it is desirable to prevent access to work queues except by the application program that is primarily associated with such work queues. Inadvertent or intentional access and modification of work queues may initiate a chain of events that leads to improperly overwriting data or program storage with the possibility of erroneous program results, unreliable computer operation, and/or unstable network conditions.
Generally, an application program cooperates with peripheral devices and other software via an interface. A description of the interface may include data and functions for causing either the peripheral device or the other software to perform intended functions. Conventional interfaces may include simple unilateral functions (e.g., read, get, set, or print), functions that may invoke a response in return (e.g., an acknowledge, error message, or completion code), service functions wherein the application program performs services at the request of another program with or without providing to the requesting program an invoked response (e.g., embedded software in a peripheral or network server software), and sequences of messages between two or more participants that are analogous to a conversation. The rules that dictate how to communicate over an interface are generally referred to as a protocol. In some conventional protocols, each party to a conversation keeps track of the expected state of each other party to the conversation to assure that messages sent will be properly understood and messages received are handled deterministically in the current context of the conversation.
Conventional networks can support numerous concurrent conversations each in a different protocol. Such support tends to rely heavily on the operating system of each party. An operating system in an implementation for supporting several conversations in several protocols tends to be significantly complex and subject to inefficient operation. A need has therefore been recognized for systems and methods for supporting concurrent conversations in a variety of protocols with reduced demand for support from an operating system.